<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>DNMP - маршрутизация</title>
<link href="ice.css" type="text/css" rel="stylesheet"/>
</head>
<body>
<p><b>Distributed Network Messaging Protocol</b></p>

<p>Коммерческое использование только с разрешения автора.<br>
При использовании необходимо явно указывать ссылку на источник.</p>

<p>Sergey Bodrov, 2009-12-29</p>

<p><b>Маршрутизация</b></p>

<p><b>Информация об узле (для маршрутизации)</b></p>

Информация об узле содержит:<br>
<b>node_addr</b> - адрес узла<br>
<b>node_rate</b> - рейтинг узла<br>
<b>avail_rate</b> - средний рейтинг доступности узла<br>
<b>speed_rate</b> - средний рейтинг скорости узла<br>
<b>node_trip</b> - число переходов до узла<br>
<b>recent_ts</b> - таймштамп последнего принятого сообщения с информацией об узле<br>

<p>Если один из рейтингов (или сводный рейтинг) подключенного узла падает ниже критической отметки, то связь с узлом прерывается.</p>

<p><b>Описание автоматической маршрутизации</b></p>

<p>На каждом узле хранится список даунлинков, и для каждого даунлинка динамический список нижестоящих узлов. Если аплинк единственный, то для него список узлов не нужен. Подразумевается, что все прочие узлы находятся на аплинке.</p>

<p>При отправке сообщения узел узел назначения ищется в списках узлов даунлинков. Если найден, то сообщение направляется соответствующему даунлинку, асли не найден, то аплинку.</p>

<p><u>При подключении узла N1 к узлу N2:</u></p>

1. N1 сообщает N2 список всех своих нижестоящих узлов.<br>
2. N2 сообщает N1 свой список узлов.<br>
3. N2 отсылает своему аплинку эхо-запрос с информацией об N1.<br>
4. N1 отсылает своим даунлинкам эхо-запрос с информацией об N2.<br>

<p><u>При отключении узла N1 от узла N2</u></p>
1. N2 отсылает своему аплинку эхо-запрос с информацией об N1 с признаком отключения.<br>
2. N1 отсылает своим даунлинкам эхо-запрос с информацией об N2 с признаком отключения.<br>

<p><u>При получении узлом эхо-запроса с информацией об узле N1:</u></p>

1. Из всех динамических списков удяляется информация об N1<br>
2. Если эхо-запрос пришел от даунлинка, то информация об N1 добавляется в список узлов данного даунлинка.<br>
3. Если рейтинг N1 ниже определенного порога, то он добавляется в черный список узлов<br>
4. Если данные с таймштампом принятого сообщения с информацией об N1 уже есть в списке узлов, то это значит, что существует альтернативный маршрут движения сообщений от узла N1. Эта информация игнорируется, поскольку она пришла позже, и ее маршрут длиннее по времени.<br>

<p><b>Сегменты сети</b></p>

<p>Узлы, непрерывно соединенные между собой, образуют сегмент сети. Сегменты могут соединяться между собой. Каждый сегмент имеет свое название и диапазон номеров узлов. Автоматическая маршрутизация работает только внутри одного сегмента.</p>

<p>Пограничные узлы, это связанные между собой узлы, принадлежащие разным сегментам. При передаче сообщения, отправленного из родного сегмента в соседний, пограничный узел добавляет в сообщение название родного сегмента.</p>

<p>Если диапазоны номеров узлов соседних сегментов пересекаются, то при переходе между сегментами адреса отправки и назначения модифицируются. Входящим из соседнего сегмента сообщениям в номер узла-отправителя добавляется, а из номера узла-получателя вычитается префикс номера соседнего сегмента.</p>

<p><b>Карта сегмента сети</b></p>

<p>Любой узел сегмента при помощи эхо-запроса информации каждого узла может построить карту сегмента, используя полученную информацию об узлах сегмента и сведения о пройденных узлах в синбаях сообщения.</p>

<p><b>Резервный линк</b></p>

<p>Для обеспечения бесперебойной работы сети, узел помимо аплинка должен иметь резервный линк, который станет новым аплинком в случае потери связи с аплинком. Резервных линков может быть несколько.</p>

<p><b>Формат сообщений</b></p>

<a href="info.htm">Сервис INFO</a><br>

</body>
</html>